---
title: Redisun 介绍
description: Redisun 是一个基于 smart-socket 开发的轻量级高性能 Redis 客户端，专为 Java 平台设计。
sidebar:
  order: 1
---

import { Card } from '@astrojs/starlight/components';

## Redisun 是什么？

Redisun 是一个基于 [smart-socket](https://gitee.com/smartboot/smart-socket) 开发的轻量级高性能 Redis 客户端，专为 Java 平台设计。它支持异步非阻塞 I/O 操作，提供与 Redis 服务器兼容的内存键值存储访问能力。

<Card title="💡 核心特性" icon="rocket">
  - **轻量级设计**：核心代码仅由少量类组成，jar包仅33KB，资源占用极小
  - **高性能通信**：基于 smart-socket Java AIO 实现，单线程处理能力强，资源消耗低
  - **连接复用技术**：创新的连接复用机制，一个连接可同时处理多个并发请求
  - **RESP 协议支持**：完整支持 Redis 序列化协议（RESP），兼容 Redis 服务器
</Card>

## 基本使用示例

下面是一个简单的使用示例，展示了如何使用 Redisun 进行基本的 Redis 操作：

```java
import tech.smartboot.redisun.Redisun;

public class BasicExample {
    public static void main(String[] args) {
        // 创建 Redisun 客户端实例
        Redisun redisun = Redisun.create(options -> 
            options.setAddress("127.0.0.1:6379")  // 设置 Redis 服务器地址
                   .debug(true)                    // 开启调试模式
        );

        try {
            // 设置键值对
            boolean setResult = redisun.set("hello", "world");
            System.out.println("SET操作结果: " + setResult);

            // 获取键值
            String getResult = redisun.get("hello");
            System.out.println("GET操作结果: " + getResult);

            // 删除键
            int delResult = redisun.del("hello");
            System.out.println("DEL操作结果: " + delResult);
        } finally {
            // 关闭客户端，释放资源
            redisun.close();
        }
    }
}
```

### 更多操作示例

Redisun 还支持更多 Redis 命令，例如有序集合操作：

```java
// 添加元素到有序集合
int zaddResult = redisun.zadd("myzset", 1.0, "member1");
System.out.println("ZADD操作结果: " + zaddResult);

// 可选参数设置
boolean setResultWithOptions = redisun.set("key", "value", cmd -> 
    cmd.expire(60)              // 设置60秒过期
       .setIfNotExists()        // 仅在键不存在时设置
);
System.out.println("带选项的SET操作结果: " + setResultWithOptions);
```

通过这些示例，您可以看到 Redisun 的 API 设计简洁直观，易于集成到您的项目中。

## Redis 命令开发计划 📋

Redisun 正在不断扩展对 Redis 命令的支持。以下是当前命令实现状态和未来开发计划：

### 开发优先级说明

- **🔴 高优先级 (P0)**: 核心常用命令，直接影响客户端可用性
- **🟡 中优先级 (P1)**: 重要但非核心命令，完善客户端功能
- **🟢 低优先级 (P2)**: 特殊场景命令，根据需求决定是否实现

### ✅ 已完全支持的命令

| 命令 | 描述 | 实现类 | 备注 |
|------|------|--------|------|
| `HELLO` | 服务器握手和认证 | [HelloCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/HelloCommand.java) | 支持认证和协议协商 |
| `SET` | 设置键值对 | [SetCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/SetCommand.java) | 完整选项支持：NX、XX、EX、PX、PXAT、KEEPTTL |
| `GET` | 获取键的值 | [GetCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/GetCommand.java) | 基本键值检索 |
| `DEL` | 删除一个或多个键 | [DelCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/DelCommand.java) | 支持多键删除 |
| `ZADD` | 向有序集合添加成员 | [ZAddCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/ZAddCommand.java) | 基本有序集合成员添加 |
| `SELECT` | 切换数据库 | [SelectCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/SelectCommand.java) | 仅在初始连接时执行，不支持运行时切换 |
| `DBSIZE` | 返回当前数据库的键数量 | [DBSizeCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/DBSizeCommand.java) | 统计当前数据库键数量 |
| `FLUSHALL` | 清空所有数据库 | [FlushAllCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/FlushAllCommand.java) | 删除所有数据库中的键 |
| `FLUSHDB` | 清空当前数据库 | [FlushDbCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/FlushDbCommand.java) | 清除当前数据库 |
| `EXISTS` | 检查键是否存在 | [ExistsCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/ExistsCommand.java) | 检查一个或多个键是否存在 |
| `INCR` | 将键的整数值加一 | [IncrCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/IncrCommand.java) | 原子递增操作 |
| `DECR` | 将键的整数值减一 | [DecrCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/DecrCommand.java) | 原子递减操作 |
| `APPEND` | 追加值到键 | [AppendCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/AppendCommand.java) | 字符串追加操作 |
| `STRLEN` | 获取键值的长度 | [StrlenCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/StrlenCommand.java) | 字符串长度操作 |
| `HSET` | 设置哈希字段的字符串值 | [HSetCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/HSetCommand.java) | 哈希字段设置操作 |
| `HGET` | 获取哈希字段的值 | [HGetCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/HGetCommand.java) | 哈希字段获取操作 |
| `SADD` | 向集合添加一个或多个成员 | [SAddCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/SAddCommand.java) | 集合成员添加操作 |
| `INCRBY` | 将键的整数值增加给定数值 | [IncrByCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/IncrByCommand.java) | 原子递增操作 |
| `DECRBY` | 将键的整数值减少给定数值 | [DecrByCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/DecrByCommand.java) | 原子递减操作 |
| `MGET` | 获取所有给定键的值 | [MGetCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/MGetCommand.java) | 获取多个键值 |
| `MSET` | 设置多个键值对 | [MSetCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/MSetCommand.java) | 设置多个键值对 |
| `EXPIRE` | 为给定 key 设置过期时间 | [ExpireCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/ExpireCommand.java) | 支持 NX, XX, GT, LT 选项 |
| `TTL` | 获取键的剩余过期时间 | [TtlCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/TtlCommand.java) | 以秒为单位返回键的剩余生存时间 |
| `TYPE` | 获取键值的类型 | [TypeCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/TypeCommand.java) | 返回键值的类型 |
| `LPUSH` | 在列表头部插入元素 | [LPushCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/LPushCommand.java) | 在列表头部插入一个或多个元素 |
| `RPUSH` | 在列表尾部插入元素 | [RPushCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/RPushCommand.java) | 在列表尾部插入一个或多个元素 |
| `LPOP` | 移除并返回列表头部元素 | [LPopCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/LPopCommand.java) | 移除并返回列表的第一个元素 |
| `RPOP` | 移除并返回列表尾部元素 | [RPopCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/RPopCommand.java) | 移除并返回列表的最后一个元素 |
| `ZREM` | 从有序集合中移除成员 | [ZRemCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/ZRemCommand.java) | 从有序集合中移除一个或多个成员 |
| `ZRANGE` | 返回有序集合的成员范围 | [ZRangeCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/ZRangeCommand.java) | 返回有序集合指定索引范围的成员 |
| `ZSCORE` | 获取有序集合成员的分数 | [ZScoreCommand](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/cmd/ZScoreCommand.java) | 获取有序集合中指定成员的分数 |

### 🚧 计划中的命令

我们正在积极扩展 Redis 命令支持。未来版本将包括更多命令。

#### 字符串命令

| 命令 | 优先级 | 状态 | 说明 |
|------|--------|------|------|
| `GETRANGE` | 🟡 P1 | 待开发 | 返回键的值的子字符串 |
| `SETRANGE` | 🟡 P1 | 待开发 | 覆盖键值的一部分 |
| `GETSET` | 🟡 P1 | 待开发 | 设置键的字符串值并返回其旧值 |
| `INCRBYFLOAT` | 🟡 P1 | 待开发 | 将键的浮点值增加给定数值 |
| `MSETNX` | 🟡 P1 | 待开发 | 同时设置多个键值对，仅当所有键都不存在时 |
| `PSETEX` | 🟢 P2 | 待开发 | 以毫秒为单位设置键的过期时间和值 |
| `SETBIT` | 🟢 P2 | 待开发 | 设置或清除键的字符串值中偏移量上的位 |
| `GETBIT` | 🟢 P2 | 待开发 | 获取键的字符串值中偏移量上的位值 |
| `BITCOUNT` | 🟢 P2 | 待开发 | 计算键的字符串值中被设置为 1 的位数量 |
| `BITOP` | 🟢 P2 | 待开发 | 对多个键执行位运算操作 |
| `BITPOS` | 🟢 P2 | 待开发 | 查找键的字符串值中第一个被设置为 0 或 1 的位位置 |

#### 哈希命令

| 命令 | 优先级 | 状态 | 说明 |
|------|--------|------|------|
| `HMSET` | 🟡 P1 | 待开发 | 同时将多个 field-value (域-值)对设置到哈希表中 |
| `HMGET` | 🟡 P1 | 待开发 | 获取哈希表中一个或多个给定域的值 |
| `HGETALL` | 🟡 P1 | 待开发 | 获取哈希表中所有的域和值 |
| `HDEL` | 🟡 P1 | 待开发 | 删除哈希表中一个或多个指定域 |
| `HEXISTS` | 🟡 P1 | 待开发 | 查看哈希表中指定域是否存在 |
| `HLEN` | 🟡 P1 | 待开发 | 获取哈希表中域的数量 |
| `HINCRBY` | 🟡 P1 | 待开发 | 为哈希表中指定域的值加上增量 |
| `HINCRBYFLOAT` | 🟡 P1 | 待开发 | 为哈希表中指定域的值加上浮点增量 |
| `HKEYS` | 🟢 P2 | 待开发 | 获取哈希表中所有的域 |
| `HVALS` | 🟢 P2 | 待开发 | 获取哈希表中所有的值 |
| `HSETNX` | 🟢 P2 | 待开发 | 只有在域 field 不存在时，设置哈希表字段的值 |
| `HSCAN` | 🟢 P2 | 待开发 | 迭代哈希表中的键值对 |
| `HRANDFIELD` | 🟢 P2 | 待开发 | 从哈希表中随机获取字段 |

#### 列表命令

| 命令 | 优先级 | 状态 | 说明 |
|------|--------|------|------|
| `LLEN` | 🟡 P1 | 待开发 | 获取列表长度 |
| `LRANGE` | 🟡 P1 | 待开发 | 获取列表指定范围内的元素 |
| `LINDEX` | 🟡 P1 | 待开发 | 通过索引获取列表中的元素 |
| `LSET` | 🟡 P1 | 待开发 | 通过索引设置列表元素的值 |
| `LREM` | 🟡 P1 | 待开发 | 移除列表中与参数值相等的元素 |
| `LTRIM` | 🟡 P1 | 待开发 | 对一个列表进行修剪(trim)，保留指定区间内的元素 |
| `LINSERT` | 🟡 P1 | 待开发 | 在列表的元素前或者后插入元素 |
| `BLPOP` | 🟢 P2 | 待开发 | 移出并获取列表的第一个元素，如果列表没有元素会阻塞 |
| `BRPOP` | 🟢 P2 | 待开发 | 移出并获取列表的最后一个元素，如果列表没有元素会阻塞 |
| `RPOPLPUSH` | 🟢 P2 | 待开发 | 移除列表的最后一个元素，并将该元素添加到另一个列表并返回 |
| `BRPOPLPUSH` | 🟢 P2 | 待开发 | 从列表中弹出一个值，将弹出的元素插入到另外一个列表中并返回它 |
| `LPOS` | 🟢 P2 | 待开发 | 返回列表中匹配元素的各项信息 |

#### 集合命令

| 命令 | 优先级 | 状态 | 说明 |
|------|--------|------|------|
| `SCARD` | 🟡 P1 | 待开发 | 获取集合的成员数 |
| `SMEMBERS` | 🟡 P1 | 待开发 | 返回集合中的所有成员 |
| `SISMEMBER` | 🟡 P1 | 待开发 | 判断成员元素是否是集合的成员 |
| `SMISMEMBER` | 🟡 P1 | 待开发 | 判断多个成员元素是否是集合的成员 |
| `SREM` | 🟡 P1 | 待开发 | 移除集合中的一个或多个成员 |
| `SPOP` | 🟡 P1 | 待开发 | 移除并返回集合中的一个随机元素 |
| `SRANDMEMBER` | 🟡 P1 | 待开发 | 返回集合中的一个或多个随机元素 |
| `SMOVE` | 🟡 P1 | 待开发 | 将指定成员元素从源集合移动到目标集合 |
| `SDIFF` | 🟢 P2 | 待开发 | 返回给定所有集合的差集 |
| `SDIFFSTORE` | 🟢 P2 | 待开发 | 将给定所有集合的差集存储在指定的集合中 |
| `SINTER` | 🟢 P2 | 待开发 | 返回给定所有集合的交集 |
| `SINTERSTORE` | 🟢 P2 | 待开发 | 将给定所有集合的交集存储在指定的集合中 |
| `SUNION` | 🟢 P2 | 待开发 | 返回给定所有集合的并集 |
| `SUNIONSTORE` | 🟢 P2 | 待开发 | 将给定所有集合的并集存储在指定的集合中 |
| `SSCAN` | 🟢 P2 | 待开发 | 迭代集合中的元素 |

#### 有序集合命令

| 命令 | 优先级 | 状态 | 说明 |
|------|--------|------|------|
| `ZCARD` | 🟡 P1 | 待开发 | 获取有序集合的成员数 |
| `ZCOUNT` | 🟡 P1 | 待开发 | 计算在有序集合中指定区间分数的成员数 |
| `ZINCRBY` | 🟡 P1 | 待开发 | 有序集合中对指定成员的分数加上增量 |
| `ZREVRANGE` | 🟡 P1 | 待开发 | 返回有序集中指定区间内的成员，通过索引，分数从高到低 |
| `ZREVRANK` | 🟡 P1 | 待开发 | 返回有序集合中指定成员的排名，有序集成员按分数值递减(从大到小)排序 |
| `ZLEXCOUNT` | 🟢 P2 | 待开发 | 在有序集合中计算指定字典区间内成员数量 |
| `ZRANGEBYLEX` | 🟢 P2 | 待开发 | 通过字典区间返回有序集合的成员 |
| `ZREMRANGEBYLEX` | 🟢 P2 | 待开发 | 移除有序集合中给定的字典区间的所有成员 |
| `ZRANGEBYSCORE` | 🟢 P2 | 待开发 | 通过分数返回有序集合指定区间内的成员 |
| `ZREVRANGEBYSCORE` | 🟢 P2 | 待开发 | 返回有序集中指定分数区间内的成员，分数从高到低排序 |
| `ZREMRANGEBYRANK` | 🟢 P2 | 待开发 | 移除有序集合中给定排名区间的所有成员 |
| `ZREMRANGEBYSCORE` | 🟢 P2 | 待开发 | 移除有序集合中给定分数区间的所有成员 |
| `ZUNION` | 🟢 P2 | 待开发 | 计算给定的一个或多个有序集的并集 |
| `ZUNIONSTORE` | 🟢 P2 | 待开发 | 计算给定的一个或多个有序集的并集，并存储在新的有序集中 |
| `ZINTER` | 🟢 P2 | 待开发 | 计算给定的一个或多个有序集的交集 |
| `ZINTERSTORE` | 🟢 P2 | 待开发 | 计算给定的一个或多个有序集的交集，并存储在新的有序集中 |
| `ZSCAN` | 🟢 P2 | 待开发 | 迭代有序集合中的元素（包括元素成员和元素分值） |
| `ZMSCORE` | 🟢 P2 | 待开发 | 返回有序集中一个或多个成员的分数 |
| `ZRANK` | 🟢 P2 | 待开发 | 返回有序集合中指定成员的索引 |

#### 通用命令

| 命令 | 优先级 | 状态 | 说明 |
|------|--------|------|------|
| `KEYS` | 🟡 P1 | 待开发 | 查找所有符合给定模式(pattern)的键 |
| `PEXPIRE` | 🟡 P1 | 待开发 | 设置键的过期时间（毫秒） |
| `PTTL` | 🟡 P1 | 待开发 | 以毫秒为单位返回键的剩余生存时间 |
| `PERSIST` | 🟡 P1 | 待开发 | 移除键的过期时间 |
| `EXPIREAT` | 🟡 P1 | 待开发 | 为键设置过期时间戳 |
| `PEXPIREAT` | 🟡 P1 | 待开发 | 以毫秒为单位为键设置过期时间戳 |
| `RANDOMKEY` | 🟢 P2 | 待开发 | 从当前数据库中随机返回一个键 |
| `RENAME` | 🟢 P2 | 待开发 | 修改键的名称 |
| `RENAMENX` | 🟢 P2 | 待开发 | 仅在新键不存在时修改键名 |
| `MOVE` | 🟢 P2 | 待开发 | 将当前数据库的键移动到指定数据库中 |
| `DUMP` | 🟢 P2 | 待开发 | 序列化给定键，并返回被序列化的值 |
| `RESTORE` | 🟢 P2 | 待开发 | 反序列化给定的序列化值，并将它和给定的键相关联 |
| `SORT` | 🟢 P2 | 待开发 | 返回或保存给定列表、集合、有序集合键的经过排序的元素 |
| `SCAN` | 🟢 P2 | 待开发 | 迭代数据库中的键空间 |

#### 服务器命令

| 命令 | 优先级 | 状态 | 说明 |
|------|--------|------|------|
| `INFO` | 🟡 P1 | 待开发 | 获取 Redis 服务器的各种信息和统计数值 |
| `TIME` | 🟢 P2 | 待开发 | 返回当前服务器时间 |
| `PING` | 🟢 P2 | 待开发 | 测试与服务器的连接是否仍然生效 |
| `ECHO` | 🟢 P2 | 待开发 | 打印特定信息 |
| `CLIENT LIST` | 🟢 P2 | 待开发 | 获取连接到服务器的客户端连接列表 |
| `CLIENT KILL` | 🟢 P2 | 待开发 | 关闭地址为 addr 的客户端连接 |
| `CONFIG GET` | 🟢 P2 | 待开发 | 获取配置参数的值 |
| `CONFIG SET` | 🟢 P2 | 待开发 | 修改配置参数的值 |
| `BGSAVE` | 🟢 P2 | 待开发 | 在后台异步保存当前数据库的数据到磁盘 |
| `LASTSAVE` | 🟢 P2 | 待开发 | 返回最近一次 Redis 成功将数据保存到磁盘上的时间 |

### 🛠 自定义命令扩展

Redisun 提供了强大的扩展机制。您可以通过继承 [Command](https://gitee.com/smartboot/redisun/blob/master/src/main/java/tech/smartboot/redisun/Command.java) 基类轻松实现自定义 Redis 命令。这使得添加库中尚未内置的任何 Redis 命令支持变得简单。

有关使用自定义命令扩展 Redisun 的详细信息，请参阅我们的[扩展指南](https://smartboot.tech/redisun/guides/cmd_expand/)。